package com.webbase.control.controller;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;

import cn.hutool.json.JSON;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.webbase.control.common.result.Result;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;

@RequiresAuthentication
@RestController//返回JSON
@RequestMapping("/file")
public class FileController {
    @Value("${server.port}")
    private String port;
    private static final String ip = "http://124.70.53.159";
//    private static final String ip = "http://localhost";
    @PostMapping("/upload")
    public Result<?> upload(MultipartFile file) throws IOException {
        String filename = file.getOriginalFilename();   //获取文件名称
        //定义唯一标识符
        String uuid = IdUtil.fastSimpleUUID();
        String filePath = "/usr/local/uploadfilework/";
//        String filePath = "/D:\\1\\";

        String rootFilePath = filePath + uuid + "_" + filename;  //获取文件存储路劲
        FileUtil.writeBytes(file.getBytes(), rootFilePath);
        return new Result().fileSuccess(ip + ":" + port + "/file/" + uuid);
    }
//    @PostMapping("/editor/upload")
//    public JSON editor(MultipartFile file) throws IOException {
//        String filename = file.getOriginalFilename();   //获取文件名称
//        //定义唯一标识符
//        String uuid = IdUtil.fastSimpleUUID();
//        String rootFilePath = System.getProperty("user.dir") + "/springboot/src/main/resources/files/" + uuid + "_" + filename;  //获取文件存储路劲
//        FileUtil.writeBytes(file.getBytes(), rootFilePath);
//        String url = ip + ":" + port + "/file/" + uuid;
//        JSONObject json = new JSONObject();
//        json.set("errno",0);
//        JSONArray array = new JSONArray();
//        JSONObject data = new JSONObject();
//        array.add(data);
//        data.set("url",url);
//        json.set("data",array);
//        return json;
//    }
    @GetMapping("/{flag}")
    public void getFiles(@PathVariable String flag, HttpServletResponse response) {
        System.out.println("1");
        OutputStream os;  // 新建一个输出流对象
        String basePath = "/usr/local/uploadfilework/";  // 定于文件上传的根路径
        List<String> fileNames = FileUtil.listFileNames(basePath);  // 获取所有的文件名称
        System.out.println(fileNames);
        System.out.println("2");
        String fileName = fileNames.stream().filter(name -> name.contains(flag)).findAny().orElse("");  // 找到跟参数一致的文件
        try {
            if (StrUtil.isNotEmpty(fileName)) {
                response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
                response.setContentType("application/octet-stream");
                byte[] bytes = FileUtil.readBytes(basePath + fileName);  // 通过文件的路径读取文件字节流
                os = response.getOutputStream();   // 通过输出流返回文件
                os.write(bytes);
                os.flush();
                os.close();
            }
        } catch (Exception e) {
            System.out.println("文件下载失败");
        }
    }

}
